/**
 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.swt.mto.thithu.service.base;

import com.liferay.counter.service.CounterLocalService;

import com.liferay.portal.kernel.bean.BeanReference;
import com.liferay.portal.kernel.bean.IdentifiableBean;
import com.liferay.portal.kernel.dao.jdbc.SqlUpdate;
import com.liferay.portal.kernel.dao.jdbc.SqlUpdateFactoryUtil;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.Indexable;
import com.liferay.portal.kernel.search.IndexableType;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.model.PersistedModel;
import com.liferay.portal.service.BaseLocalServiceImpl;
import com.liferay.portal.service.PersistedModelLocalServiceRegistryUtil;
import com.liferay.portal.service.ResourceLocalService;
import com.liferay.portal.service.ResourceService;
import com.liferay.portal.service.UserLocalService;
import com.liferay.portal.service.UserService;
import com.liferay.portal.service.persistence.ResourcePersistence;
import com.liferay.portal.service.persistence.UserPersistence;

import com.swt.mto.thithu.model.QuizCategory;
import com.swt.mto.thithu.service.AnswerLocalService;
import com.swt.mto.thithu.service.LoadAjaxLocalService;
import com.swt.mto.thithu.service.QuestionLocalService;
import com.swt.mto.thithu.service.QuizCategoryLocalService;
import com.swt.mto.thithu.service.QuizLocalService;
import com.swt.mto.thithu.service.ResultLocalService;
import com.swt.mto.thithu.service.persistence.AnswerPersistence;
import com.swt.mto.thithu.service.persistence.LoadAjaxPersistence;
import com.swt.mto.thithu.service.persistence.QuestionPersistence;
import com.swt.mto.thithu.service.persistence.QuizCategoryPersistence;
import com.swt.mto.thithu.service.persistence.QuizPersistence;
import com.swt.mto.thithu.service.persistence.ResultPersistence;

import java.io.Serializable;

import java.util.List;

import javax.sql.DataSource;

/**
 * The base implementation of the quiz category local service.
 *
 * <p>
 * This implementation exists only as a container for the default service methods generated by ServiceBuilder. All custom service methods should be put in {@link com.swt.mto.thithu.service.impl.QuizCategoryLocalServiceImpl}.
 * </p>
 *
 * @author tuan.nguyen
 * @see com.swt.mto.thithu.service.impl.QuizCategoryLocalServiceImpl
 * @see com.swt.mto.thithu.service.QuizCategoryLocalServiceUtil
 * @generated
 */
public abstract class QuizCategoryLocalServiceBaseImpl
	extends BaseLocalServiceImpl implements QuizCategoryLocalService,
		IdentifiableBean {
	/*
	 * NOTE FOR DEVELOPERS:
	 *
	 * Never modify or reference this class directly. Always use {@link com.swt.mto.thithu.service.QuizCategoryLocalServiceUtil} to access the quiz category local service.
	 */

	/**
	 * Adds the quiz category to the database. Also notifies the appropriate model listeners.
	 *
	 * @param quizCategory the quiz category
	 * @return the quiz category that was added
	 * @throws SystemException if a system exception occurred
	 */
	@Indexable(type = IndexableType.REINDEX)
	public QuizCategory addQuizCategory(QuizCategory quizCategory)
		throws SystemException {
		quizCategory.setNew(true);

		return quizCategoryPersistence.update(quizCategory, false);
	}

	/**
	 * Creates a new quiz category with the primary key. Does not add the quiz category to the database.
	 *
	 * @param quizCategoryId the primary key for the new quiz category
	 * @return the new quiz category
	 */
	public QuizCategory createQuizCategory(long quizCategoryId) {
		return quizCategoryPersistence.create(quizCategoryId);
	}

	/**
	 * Deletes the quiz category with the primary key from the database. Also notifies the appropriate model listeners.
	 *
	 * @param quizCategoryId the primary key of the quiz category
	 * @return the quiz category that was removed
	 * @throws PortalException if a quiz category with the primary key could not be found
	 * @throws SystemException if a system exception occurred
	 */
	@Indexable(type = IndexableType.DELETE)
	public QuizCategory deleteQuizCategory(long quizCategoryId)
		throws PortalException, SystemException {
		return quizCategoryPersistence.remove(quizCategoryId);
	}

	/**
	 * Deletes the quiz category from the database. Also notifies the appropriate model listeners.
	 *
	 * @param quizCategory the quiz category
	 * @return the quiz category that was removed
	 * @throws SystemException if a system exception occurred
	 */
	@Indexable(type = IndexableType.DELETE)
	public QuizCategory deleteQuizCategory(QuizCategory quizCategory)
		throws SystemException {
		return quizCategoryPersistence.remove(quizCategory);
	}

	public DynamicQuery dynamicQuery() {
		Class<?> clazz = getClass();

		return DynamicQueryFactoryUtil.forClass(QuizCategory.class,
			clazz.getClassLoader());
	}

	/**
	 * Performs a dynamic query on the database and returns the matching rows.
	 *
	 * @param dynamicQuery the dynamic query
	 * @return the matching rows
	 * @throws SystemException if a system exception occurred
	 */
	@SuppressWarnings("rawtypes")
	public List dynamicQuery(DynamicQuery dynamicQuery)
		throws SystemException {
		return quizCategoryPersistence.findWithDynamicQuery(dynamicQuery);
	}

	/**
	 * Performs a dynamic query on the database and returns a range of the matching rows.
	 *
	 * <p>
	 * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set.
	 * </p>
	 *
	 * @param dynamicQuery the dynamic query
	 * @param start the lower bound of the range of model instances
	 * @param end the upper bound of the range of model instances (not inclusive)
	 * @return the range of matching rows
	 * @throws SystemException if a system exception occurred
	 */
	@SuppressWarnings("rawtypes")
	public List dynamicQuery(DynamicQuery dynamicQuery, int start, int end)
		throws SystemException {
		return quizCategoryPersistence.findWithDynamicQuery(dynamicQuery,
			start, end);
	}

	/**
	 * Performs a dynamic query on the database and returns an ordered range of the matching rows.
	 *
	 * <p>
	 * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set.
	 * </p>
	 *
	 * @param dynamicQuery the dynamic query
	 * @param start the lower bound of the range of model instances
	 * @param end the upper bound of the range of model instances (not inclusive)
	 * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
	 * @return the ordered range of matching rows
	 * @throws SystemException if a system exception occurred
	 */
	@SuppressWarnings("rawtypes")
	public List dynamicQuery(DynamicQuery dynamicQuery, int start, int end,
		OrderByComparator orderByComparator) throws SystemException {
		return quizCategoryPersistence.findWithDynamicQuery(dynamicQuery,
			start, end, orderByComparator);
	}

	/**
	 * Returns the number of rows that match the dynamic query.
	 *
	 * @param dynamicQuery the dynamic query
	 * @return the number of rows that match the dynamic query
	 * @throws SystemException if a system exception occurred
	 */
	public long dynamicQueryCount(DynamicQuery dynamicQuery)
		throws SystemException {
		return quizCategoryPersistence.countWithDynamicQuery(dynamicQuery);
	}

	public QuizCategory fetchQuizCategory(long quizCategoryId)
		throws SystemException {
		return quizCategoryPersistence.fetchByPrimaryKey(quizCategoryId);
	}

	/**
	 * Returns the quiz category with the primary key.
	 *
	 * @param quizCategoryId the primary key of the quiz category
	 * @return the quiz category
	 * @throws PortalException if a quiz category with the primary key could not be found
	 * @throws SystemException if a system exception occurred
	 */
	public QuizCategory getQuizCategory(long quizCategoryId)
		throws PortalException, SystemException {
		return quizCategoryPersistence.findByPrimaryKey(quizCategoryId);
	}

	public PersistedModel getPersistedModel(Serializable primaryKeyObj)
		throws PortalException, SystemException {
		return quizCategoryPersistence.findByPrimaryKey(primaryKeyObj);
	}

	/**
	 * Returns a range of all the quiz categories.
	 *
	 * <p>
	 * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set.
	 * </p>
	 *
	 * @param start the lower bound of the range of quiz categories
	 * @param end the upper bound of the range of quiz categories (not inclusive)
	 * @return the range of quiz categories
	 * @throws SystemException if a system exception occurred
	 */
	public List<QuizCategory> getQuizCategories(int start, int end)
		throws SystemException {
		return quizCategoryPersistence.findAll(start, end);
	}

	/**
	 * Returns the number of quiz categories.
	 *
	 * @return the number of quiz categories
	 * @throws SystemException if a system exception occurred
	 */
	public int getQuizCategoriesCount() throws SystemException {
		return quizCategoryPersistence.countAll();
	}

	/**
	 * Updates the quiz category in the database or adds it if it does not yet exist. Also notifies the appropriate model listeners.
	 *
	 * @param quizCategory the quiz category
	 * @return the quiz category that was updated
	 * @throws SystemException if a system exception occurred
	 */
	@Indexable(type = IndexableType.REINDEX)
	public QuizCategory updateQuizCategory(QuizCategory quizCategory)
		throws SystemException {
		return updateQuizCategory(quizCategory, true);
	}

	/**
	 * Updates the quiz category in the database or adds it if it does not yet exist. Also notifies the appropriate model listeners.
	 *
	 * @param quizCategory the quiz category
	 * @param merge whether to merge the quiz category with the current session. See {@link com.liferay.portal.service.persistence.BatchSession#update(com.liferay.portal.kernel.dao.orm.Session, com.liferay.portal.model.BaseModel, boolean)} for an explanation.
	 * @return the quiz category that was updated
	 * @throws SystemException if a system exception occurred
	 */
	@Indexable(type = IndexableType.REINDEX)
	public QuizCategory updateQuizCategory(QuizCategory quizCategory,
		boolean merge) throws SystemException {
		quizCategory.setNew(false);

		return quizCategoryPersistence.update(quizCategory, merge);
	}

	/**
	 * Returns the answer local service.
	 *
	 * @return the answer local service
	 */
	public AnswerLocalService getAnswerLocalService() {
		return answerLocalService;
	}

	/**
	 * Sets the answer local service.
	 *
	 * @param answerLocalService the answer local service
	 */
	public void setAnswerLocalService(AnswerLocalService answerLocalService) {
		this.answerLocalService = answerLocalService;
	}

	/**
	 * Returns the answer persistence.
	 *
	 * @return the answer persistence
	 */
	public AnswerPersistence getAnswerPersistence() {
		return answerPersistence;
	}

	/**
	 * Sets the answer persistence.
	 *
	 * @param answerPersistence the answer persistence
	 */
	public void setAnswerPersistence(AnswerPersistence answerPersistence) {
		this.answerPersistence = answerPersistence;
	}

	/**
	 * Returns the load ajax local service.
	 *
	 * @return the load ajax local service
	 */
	public LoadAjaxLocalService getLoadAjaxLocalService() {
		return loadAjaxLocalService;
	}

	/**
	 * Sets the load ajax local service.
	 *
	 * @param loadAjaxLocalService the load ajax local service
	 */
	public void setLoadAjaxLocalService(
		LoadAjaxLocalService loadAjaxLocalService) {
		this.loadAjaxLocalService = loadAjaxLocalService;
	}

	/**
	 * Returns the load ajax persistence.
	 *
	 * @return the load ajax persistence
	 */
	public LoadAjaxPersistence getLoadAjaxPersistence() {
		return loadAjaxPersistence;
	}

	/**
	 * Sets the load ajax persistence.
	 *
	 * @param loadAjaxPersistence the load ajax persistence
	 */
	public void setLoadAjaxPersistence(LoadAjaxPersistence loadAjaxPersistence) {
		this.loadAjaxPersistence = loadAjaxPersistence;
	}

	/**
	 * Returns the question local service.
	 *
	 * @return the question local service
	 */
	public QuestionLocalService getQuestionLocalService() {
		return questionLocalService;
	}

	/**
	 * Sets the question local service.
	 *
	 * @param questionLocalService the question local service
	 */
	public void setQuestionLocalService(
		QuestionLocalService questionLocalService) {
		this.questionLocalService = questionLocalService;
	}

	/**
	 * Returns the question persistence.
	 *
	 * @return the question persistence
	 */
	public QuestionPersistence getQuestionPersistence() {
		return questionPersistence;
	}

	/**
	 * Sets the question persistence.
	 *
	 * @param questionPersistence the question persistence
	 */
	public void setQuestionPersistence(QuestionPersistence questionPersistence) {
		this.questionPersistence = questionPersistence;
	}

	/**
	 * Returns the quiz local service.
	 *
	 * @return the quiz local service
	 */
	public QuizLocalService getQuizLocalService() {
		return quizLocalService;
	}

	/**
	 * Sets the quiz local service.
	 *
	 * @param quizLocalService the quiz local service
	 */
	public void setQuizLocalService(QuizLocalService quizLocalService) {
		this.quizLocalService = quizLocalService;
	}

	/**
	 * Returns the quiz persistence.
	 *
	 * @return the quiz persistence
	 */
	public QuizPersistence getQuizPersistence() {
		return quizPersistence;
	}

	/**
	 * Sets the quiz persistence.
	 *
	 * @param quizPersistence the quiz persistence
	 */
	public void setQuizPersistence(QuizPersistence quizPersistence) {
		this.quizPersistence = quizPersistence;
	}

	/**
	 * Returns the quiz category local service.
	 *
	 * @return the quiz category local service
	 */
	public QuizCategoryLocalService getQuizCategoryLocalService() {
		return quizCategoryLocalService;
	}

	/**
	 * Sets the quiz category local service.
	 *
	 * @param quizCategoryLocalService the quiz category local service
	 */
	public void setQuizCategoryLocalService(
		QuizCategoryLocalService quizCategoryLocalService) {
		this.quizCategoryLocalService = quizCategoryLocalService;
	}

	/**
	 * Returns the quiz category persistence.
	 *
	 * @return the quiz category persistence
	 */
	public QuizCategoryPersistence getQuizCategoryPersistence() {
		return quizCategoryPersistence;
	}

	/**
	 * Sets the quiz category persistence.
	 *
	 * @param quizCategoryPersistence the quiz category persistence
	 */
	public void setQuizCategoryPersistence(
		QuizCategoryPersistence quizCategoryPersistence) {
		this.quizCategoryPersistence = quizCategoryPersistence;
	}

	/**
	 * Returns the result local service.
	 *
	 * @return the result local service
	 */
	public ResultLocalService getResultLocalService() {
		return resultLocalService;
	}

	/**
	 * Sets the result local service.
	 *
	 * @param resultLocalService the result local service
	 */
	public void setResultLocalService(ResultLocalService resultLocalService) {
		this.resultLocalService = resultLocalService;
	}

	/**
	 * Returns the result persistence.
	 *
	 * @return the result persistence
	 */
	public ResultPersistence getResultPersistence() {
		return resultPersistence;
	}

	/**
	 * Sets the result persistence.
	 *
	 * @param resultPersistence the result persistence
	 */
	public void setResultPersistence(ResultPersistence resultPersistence) {
		this.resultPersistence = resultPersistence;
	}

	/**
	 * Returns the counter local service.
	 *
	 * @return the counter local service
	 */
	public CounterLocalService getCounterLocalService() {
		return counterLocalService;
	}

	/**
	 * Sets the counter local service.
	 *
	 * @param counterLocalService the counter local service
	 */
	public void setCounterLocalService(CounterLocalService counterLocalService) {
		this.counterLocalService = counterLocalService;
	}

	/**
	 * Returns the resource local service.
	 *
	 * @return the resource local service
	 */
	public ResourceLocalService getResourceLocalService() {
		return resourceLocalService;
	}

	/**
	 * Sets the resource local service.
	 *
	 * @param resourceLocalService the resource local service
	 */
	public void setResourceLocalService(
		ResourceLocalService resourceLocalService) {
		this.resourceLocalService = resourceLocalService;
	}

	/**
	 * Returns the resource remote service.
	 *
	 * @return the resource remote service
	 */
	public ResourceService getResourceService() {
		return resourceService;
	}

	/**
	 * Sets the resource remote service.
	 *
	 * @param resourceService the resource remote service
	 */
	public void setResourceService(ResourceService resourceService) {
		this.resourceService = resourceService;
	}

	/**
	 * Returns the resource persistence.
	 *
	 * @return the resource persistence
	 */
	public ResourcePersistence getResourcePersistence() {
		return resourcePersistence;
	}

	/**
	 * Sets the resource persistence.
	 *
	 * @param resourcePersistence the resource persistence
	 */
	public void setResourcePersistence(ResourcePersistence resourcePersistence) {
		this.resourcePersistence = resourcePersistence;
	}

	/**
	 * Returns the user local service.
	 *
	 * @return the user local service
	 */
	public UserLocalService getUserLocalService() {
		return userLocalService;
	}

	/**
	 * Sets the user local service.
	 *
	 * @param userLocalService the user local service
	 */
	public void setUserLocalService(UserLocalService userLocalService) {
		this.userLocalService = userLocalService;
	}

	/**
	 * Returns the user remote service.
	 *
	 * @return the user remote service
	 */
	public UserService getUserService() {
		return userService;
	}

	/**
	 * Sets the user remote service.
	 *
	 * @param userService the user remote service
	 */
	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	/**
	 * Returns the user persistence.
	 *
	 * @return the user persistence
	 */
	public UserPersistence getUserPersistence() {
		return userPersistence;
	}

	/**
	 * Sets the user persistence.
	 *
	 * @param userPersistence the user persistence
	 */
	public void setUserPersistence(UserPersistence userPersistence) {
		this.userPersistence = userPersistence;
	}

	public void afterPropertiesSet() {
		PersistedModelLocalServiceRegistryUtil.register("com.swt.mto.thithu.model.QuizCategory",
			quizCategoryLocalService);
	}

	public void destroy() {
		PersistedModelLocalServiceRegistryUtil.unregister(
			"com.swt.mto.thithu.model.QuizCategory");
	}

	/**
	 * Returns the Spring bean ID for this bean.
	 *
	 * @return the Spring bean ID for this bean
	 */
	public String getBeanIdentifier() {
		return _beanIdentifier;
	}

	/**
	 * Sets the Spring bean ID for this bean.
	 *
	 * @param beanIdentifier the Spring bean ID for this bean
	 */
	public void setBeanIdentifier(String beanIdentifier) {
		_beanIdentifier = beanIdentifier;
	}

	public Object invokeMethod(String name, String[] parameterTypes,
		Object[] arguments) throws Throwable {
		return _clpInvoker.invokeMethod(name, parameterTypes, arguments);
	}

	protected Class<?> getModelClass() {
		return QuizCategory.class;
	}

	protected String getModelClassName() {
		return QuizCategory.class.getName();
	}

	/**
	 * Performs an SQL query.
	 *
	 * @param sql the sql query
	 */
	protected void runSQL(String sql) throws SystemException {
		try {
			DataSource dataSource = quizCategoryPersistence.getDataSource();

			SqlUpdate sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(dataSource,
					sql, new int[0]);

			sqlUpdate.update();
		}
		catch (Exception e) {
			throw new SystemException(e);
		}
	}

	@BeanReference(type = AnswerLocalService.class)
	protected AnswerLocalService answerLocalService;
	@BeanReference(type = AnswerPersistence.class)
	protected AnswerPersistence answerPersistence;
	@BeanReference(type = LoadAjaxLocalService.class)
	protected LoadAjaxLocalService loadAjaxLocalService;
	@BeanReference(type = LoadAjaxPersistence.class)
	protected LoadAjaxPersistence loadAjaxPersistence;
	@BeanReference(type = QuestionLocalService.class)
	protected QuestionLocalService questionLocalService;
	@BeanReference(type = QuestionPersistence.class)
	protected QuestionPersistence questionPersistence;
	@BeanReference(type = QuizLocalService.class)
	protected QuizLocalService quizLocalService;
	@BeanReference(type = QuizPersistence.class)
	protected QuizPersistence quizPersistence;
	@BeanReference(type = QuizCategoryLocalService.class)
	protected QuizCategoryLocalService quizCategoryLocalService;
	@BeanReference(type = QuizCategoryPersistence.class)
	protected QuizCategoryPersistence quizCategoryPersistence;
	@BeanReference(type = ResultLocalService.class)
	protected ResultLocalService resultLocalService;
	@BeanReference(type = ResultPersistence.class)
	protected ResultPersistence resultPersistence;
	@BeanReference(type = CounterLocalService.class)
	protected CounterLocalService counterLocalService;
	@BeanReference(type = ResourceLocalService.class)
	protected ResourceLocalService resourceLocalService;
	@BeanReference(type = ResourceService.class)
	protected ResourceService resourceService;
	@BeanReference(type = ResourcePersistence.class)
	protected ResourcePersistence resourcePersistence;
	@BeanReference(type = UserLocalService.class)
	protected UserLocalService userLocalService;
	@BeanReference(type = UserService.class)
	protected UserService userService;
	@BeanReference(type = UserPersistence.class)
	protected UserPersistence userPersistence;
	private String _beanIdentifier;
	private QuizCategoryLocalServiceClpInvoker _clpInvoker = new QuizCategoryLocalServiceClpInvoker();
}